3 Interaktive Karten

Ein Nachteil von statischen Karten ist, dass diese immer das selbe abbilden. Damit ist gemeint, es wird nur ein Bereich gezeigt und alle Informationen werden direkt dargestellt. Interaktive Karten verbessern normale Karten dahingegend, dass sie dem Betrachter die Möglichkeit geben das Aussehen der Karten zu beeinflussen und zusätzliche Informationen bereitstellen können. Die am häufigsten vorkommende Art von Interaktivität ist das verschieben und zoomen der dargestellten Karte und das Anzeigen zusätzlicher Informationen bei dem Klick auf einzelne geometrische Objekte. In tmap kann durch die Funktion tmap_mode("view") zu jeder Karte Interaktivität hinzugefügt werden. Mit tmap_mode("plot") wird diese wieder entfernt.

tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(bavaria) + tm_polygons(col = "Bevoelkerungsentwicklung", midpoint = 0)

Alternativ kann die Karte auch durch tmap_leaflet() erstellt werden. Wie zu erkennen ist, kann bei der interaktiven Karten zwischen mehreren Hintergrundkarten gewählt werden. Um eine bestimmte Karten als Hintergrund zu verwenden, kann die Funktion tm_basemap() verwendet werden.

tm_shape(bavaria) + tm_polygons(col = "Bevoelkerungsentwicklung", midpoint = 0) +
  tm_basemap("Stamen.Watercolor")

Alle Karten und deren Namen können unter dem folgenden Link betrachtet werden: https://leaflet-extras.github.io/leaflet-providers/preview/

Auch facettierte Karten können im interaktiven Modus dargestellt werden:

tm_shape(bavaria) + tm_polygons(col = "Arbeitslosenquote") + tm_facets(by = "Art")

Interaktive Karten sind auch gut geeignet, um sich einen ersten Überblick über einen Datensatz zu verschaffen. In dem folgenden Beispiel werden Unfälle in drei Londoner Stadtteilen in 2017 dargestellt. Zuerst wird der Datensatz geladen, Unfälle aus dem Jahr 2017 ausgewählt und Daten ohne bekannten Standort entfernt.

accidents <- read.csv("datasets/Accident_Information.csv")
accidents <- accidents[accidents$Year == 2017, ]
accidents <- accidents[!is.na(accidents$Latitude), ]

Als nächstes wird der Datensatz in ein sf Objekt verwandelt.

accidents <- accidents %>%
  st_as_sf(coords = c("Longitude", "Latitude"), crs = 4326) %>%
  st_cast("POINT")

Danach werden Londoner Shapefiles geladen und die Intersections zwischen den beiden Datensätze gesucht.

london <- read_sf("datasets/London_Borough_Excluding_MHW.shp") %>%
  st_transform(4326)
london_union <- st_union(london)
accidents_m <- st_intersects(london_union, accidents)
accidents <- accidents[unlist(accidents_m), ]

Damit es nicht zu unübersichtlich wird, werden nur drei Stadteile ausgewählt.

london <- london[london$NAME %in% c("City of London", "Westminster", "Camden"), ]
london <- st_union(london)
accidents_m <- st_intersects(london, accidents)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
accidents <- accidents[unlist(accidents_m), ]

Jetzt muss nur noch die Karte dargestellt werden. Dafür wird zuerst die Variable Light_Conditions für eine schönere Legende sortiert, ehe die Karte geplotted wird. Jeder Punkt stellt einen Unfall dar und bei einem Klick darauf werden mehr Informationen dargestellt.

# do some ordering for the legend
accidents$Light_Conditions <- ordered(accidents$Light_Conditions,
                                      levels = c(
                                        "Daylight",
                                        "Darkness - lights lit",
                                        "Darkness - lighting unknown",
                                        "Darkness - lights unlit",
                                        "Darkness - no lighting",
                                        "Data missing or out of range"
                                      ))
# define the map
map_london <- tm_shape(accidents) +
  tm_dots(group = "2017", col = "Light_Conditions", palette = "Dark2",
          popup.vars = TRUE) +
  tm_view(alpha = 1,
          basemaps = "Esri.WorldTopoMap")
map_london